package com.hulytu.android.push.jpush;

import android.content.Context;
import android.text.TextUtils;

import com.hulytu.android.ThinDroid;
import com.hulytu.android.push.AppPush;

import org.jetbrains.annotations.NotNull;

import java.util.Map;

import cn.jpush.android.api.JPushInterface;
import cn.jpush.android.ups.JPushUPSManager;
import cn.jpush.android.ups.UPSRegisterCallBack;

/**
 * 极光推送
 * <p>
 * https://www.jiguang.cn/push
 *
 *
 * https://docs.jiguang.cn//jpush/client/Android/android_api/
 *
 * @author Chris Chan (Q:48611024 email:hulytu@163.com)
 * @since  2021/9/1 15:13
 **/
public class JPush extends AppPush {

    public static final String PARAM_APP_ID = "appId";

    private UPSRegisterCallBack registerCallBack;


    public void setRegisterCallBack(UPSRegisterCallBack registerCallBack) {
        this.registerCallBack = registerCallBack;
    }

    /**
     * 使用说明
     * 开发者如果主动调用了 registerToken 方法或者其它带 context 参数的方法，都会进行 SDK 初始化；
     * 考虑 APP 上线合规，开发者必须在 APP 用户同意了隐私政策后，再调用注册接口使用极光服务
     * 关于 APP 隐私政策建议和说明，具体可以参考如何草拟合规的隐私政策。
     * https://docs.jiguang.cn/compliance_guide/app_compliance_guide/app_compliance_guide1
     *
     * @param context 应用上下文
     * @param params  初始化参数
     */
    @Override
    public void init(@NotNull Context context, Map<String, ?> params) {
        super.init(context, params);
        JPushInterface.setDebugMode(ThinDroid.isDebug());

        Object appId;

        if (params != null
                && (appId = params.get(PARAM_APP_ID)) instanceof String
                && (!TextUtils.isEmpty((CharSequence) appId))) {

            /*
             appId:在极光官网注册应用时生成的APPKEY
             appKey:填null即可
             appSecret:填空即可
             callback:该接口的结果回调，状态码为0则说明调用成功，其它值均为失败

             注1：该接口与JPushInterface.init接口不建议混用，可直接使用该接口代替JPushInterface.init接口。
             注2：manifest中配置的appkey与该接口传入appkey建议保持一致，如不一致则以manifest中配置的接口为准。
             注3：如果manifest中appkey配置为空，则以该接口传入的appkey为准。
             */
            JPushUPSManager.registerToken(context, (String) appId, null, "", registerCallBack);
        } else {
            JPushInterface.init(context);
        }
    }

    @Override
    public String platform() {
        return "AuroraMobile";
    }

    @Override
    public String getPushDeviceToken() {
        return JPushInterface.getRegistrationID(getContext());
    }
}
